package qc.module.platform.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import qc.common.core.exception.QCPromptException;
import qc.module.platform.dto.messageConfig.MessageConfigDto;
import qc.module.platform.service.MessageConfigService;

import java.util.List;

/**
 * MessageConfigController
 * 消息通知配置Controller
 *
 * @author QuCheng Tech
 * @create 2023/11/03
 */
@RestController
@RequestMapping("/msgcfg")
public class MessageConfigController {
    private MessageConfigService messageConfigService;

    @Autowired
    public void setMessageConfigService(MessageConfigService messageConfigService) {
        this.messageConfigService = messageConfigService;
    }

    /**
     * 查询平台消息通知配置
     *
     * @return 平台消息通知配置记录集合
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "/platform", method = {RequestMethod.GET})
    public List<MessageConfigDto> queryPlatform() {
        return messageConfigService.queryPlatform();
    }

    /**
     * 查询项目消息通知配置
     *
     * @param id 项目编码
     * @return 项目消息通知配置记录集合
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "/project", method = {RequestMethod.GET})
    public List<MessageConfigDto> queryProjectByParam(@RequestParam String id) throws QCPromptException {
        return messageConfigService.queryProject(id);
    }

    /**
     * 查询项目消息通知配置
     *
     * @param id 项目编码
     * @return 项目消息通知配置记录集合
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "/project/{id}", method = {RequestMethod.GET})
    public List<MessageConfigDto> queryProjectByPath(@PathVariable String id) throws QCPromptException {
        return messageConfigService.queryProject(id);
    }

    /**
     * 获取指定消息通知配置
     *
     * @param id 消息代码
     * @return 指定消息通知配置记录
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "/get", method = {RequestMethod.GET})
    public MessageConfigDto getByParam(@RequestParam String id) {
        return messageConfigService.get(id);
    }

    /**
     * 获取指定消息通知配置
     *
     * @param id 消息代码
     * @return 指定消息通知配置记录
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "/get/{id}", method = {RequestMethod.GET})
    public MessageConfigDto getByPath(@PathVariable String id) {
        return messageConfigService.get(id);
    }

    /**
     * 新增消息通知配置记录
     *
     * @param dto 新增内容dto
     * @return 返回null表示成功，其他表示错误或提示信息
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "/add", method = {RequestMethod.POST})
    public String add(@RequestBody MessageConfigDto dto) {
        return messageConfigService.add(dto);
    }

    /**
     * 修改消息通知配置记录
     *
     * @param dto 修改内容dto
     * @return 返回null表示成功，其他表示错误或提示信息
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "/update", method = {RequestMethod.POST, RequestMethod.PUT})
    public String update(@RequestBody MessageConfigDto dto) {
        return messageConfigService.update(dto);
    }

    /**
     * 删除指定消息通知配置记录
     * 物理删除
     *
     * @param id 消息代码
     * @return 返回null表示成功，其他表示错误或提示信息
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "delete", method = {RequestMethod.DELETE})
    public String deleteByParam(@RequestParam String id) {
        return messageConfigService.delete(id);
    }

    /**
     * 删除指定消息通知配置记录
     * 物理删除
     *
     * @param id 消息代码
     * @return 返回null表示成功，其他表示错误或提示信息
     * @author QcCheng Tech
     * @since 2023/11/03
     */
    @RequestMapping(value = "/delete/{id}", method = {RequestMethod.DELETE})
    public String deleteByPath(@PathVariable String id) {
        return messageConfigService.delete(id);
    }
}
